home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.internal;
-
- import com.ibm.xml.framework.ChunkyCharArray;
- import com.ibm.xml.framework.ParserState;
- import com.ibm.xml.framework.ScanContentState;
- import com.ibm.xml.framework.StringPool;
- import com.ibm.xml.framework.XMLDocumentHandler;
- import com.ibm.xml.framework.XMLErrorHandler;
- import com.ibm.xml.framework.XMLReader;
- import java.io.IOException;
- import org.xml.sax.Locator;
-
- final class StringReader extends XMLReader {
- private StringPool fStringPool;
- private XMLDocumentHandler fDocumentHandler;
- private XMLErrorHandler fErrorHandler;
- private String fData;
- private int fEndOffset;
- private boolean oweLeadingSpace = false;
- private boolean oweTrailingSpace = false;
-
- StringReader(ParserState var1, boolean var2, Locator var3, int var4) {
- super(var1, var3.getPublicId(), var3.getSystemId());
- super.fLinefeedCounter = var3.getLineNumber();
- super.fCharacterCounter = var3.getColumnNumber();
- this.fStringPool = var1.cacheStringPool();
- this.fDocumentHandler = var1.getDocumentHandler();
- this.fErrorHandler = var1.getErrorHandler();
- this.fData = this.fStringPool.toString(var4);
- super.fCurrentOffset = 0;
- this.fEndOffset = this.fData.length();
- if (var2) {
- this.oweLeadingSpace = true;
- this.oweTrailingSpace = true;
- }
-
- }
-
- public void append(ChunkyCharArray var1, int var2, int var3) {
- var1.append(this.fData.substring(var2, var2 + var3));
- }
-
- public int addString(int var1, int var2) {
- return var2 == 0 ? 0 : this.fStringPool.addString(this.fData.substring(var1, var1 + var2));
- }
-
- public int addSymbol(int var1, int var2) {
- return var2 == 0 ? 0 : this.fStringPool.addSymbol(this.fData.substring(var1, var1 + var2));
- }
-
- public int skipOneChar() throws IOException {
- if (this.oweLeadingSpace) {
- this.oweLeadingSpace = false;
- return super.fCurrentOffset;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- this.oweTrailingSpace = false;
- return super.fCurrentOffset;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- return ++super.fCurrentOffset;
- }
- }
-
- public int skipAsciiChar() throws IOException {
- if (this.oweLeadingSpace) {
- this.oweLeadingSpace = false;
- return super.fCurrentOffset;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- this.oweTrailingSpace = false;
- return super.fCurrentOffset;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- return ++super.fCurrentOffset;
- }
- }
-
- public int skipToChar(char var1) throws IOException {
- if (this.oweLeadingSpace) {
- if (var1 == ' ') {
- return super.fCurrentOffset;
- }
-
- this.oweLeadingSpace = false;
- }
-
- while(super.fCurrentOffset < this.fEndOffset) {
- if (var1 == this.fData.charAt(super.fCurrentOffset)) {
- return super.fCurrentOffset;
- }
-
- ++super.fCurrentOffset;
- }
-
- if (this.oweTrailingSpace) {
- if (var1 == ' ') {
- return super.fCurrentOffset;
- }
-
- this.oweTrailingSpace = false;
- }
-
- throw new ArrayIndexOutOfBoundsException();
- }
-
- public int skipPastChar(char var1) throws IOException {
- if (this.oweLeadingSpace) {
- this.oweLeadingSpace = false;
- if (var1 == ' ') {
- return super.fCurrentOffset;
- }
- }
-
- while(super.fCurrentOffset < this.fEndOffset) {
- if (var1 == this.fData.charAt(super.fCurrentOffset)) {
- return ++super.fCurrentOffset;
- }
-
- ++super.fCurrentOffset;
- }
-
- if (this.oweTrailingSpace) {
- this.oweTrailingSpace = false;
- if (var1 == ' ') {
- return super.fCurrentOffset;
- }
- }
-
- throw new ArrayIndexOutOfBoundsException();
- }
-
- public boolean skippedValidChar() throws IOException {
- if (this.oweLeadingSpace) {
- this.oweLeadingSpace = false;
- return true;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- this.oweTrailingSpace = false;
- return true;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- char var1 = this.fData.charAt(super.fCurrentOffset++);
- if (var1 < ' ') {
- if (var1 != '\t' && var1 != '\n' && var1 != '\r') {
- --super.fCurrentOffset;
- return false;
- } else {
- return true;
- }
- } else if (var1 > '\ud7ff' && (var1 < '\ue000' || var1 > 'ÔøΩ' && (var1 < 65536 || var1 > 1114111))) {
- --super.fCurrentOffset;
- return false;
- } else {
- return true;
- }
- }
- }
-
- public boolean lookingAtValidChar() throws IOException {
- if (this.oweLeadingSpace) {
- this.oweLeadingSpace = false;
- return true;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- this.oweTrailingSpace = false;
- return true;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- char var1 = this.fData.charAt(super.fCurrentOffset);
- if (var1 < ' ') {
- return var1 == '\t' || var1 == '\n' || var1 == '\r';
- } else {
- return var1 <= '\ud7ff' || var1 >= '\ue000' && (var1 <= 'ÔøΩ' || var1 >= 65536 && var1 <= 1114111);
- }
- }
- }
-
- public int skipInvalidChar(int var1) throws Exception {
- char var2;
- if (this.oweLeadingSpace) {
- this.oweLeadingSpace = false;
- var2 = ' ';
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (!this.oweTrailingSpace) {
- throw new ArrayIndexOutOfBoundsException();
- }
-
- this.oweTrailingSpace = false;
- var2 = ' ';
- } else {
- var2 = this.fData.charAt(super.fCurrentOffset++);
- }
-
- switch (var1) {
- case 43:
- String var6 = (new Character((char)var2)).toString();
- String var4 = Integer.toHexString(var2);
- this.fErrorHandler.error2(var1, this.fStringPool.addString(var6), this.fStringPool.addString(var4));
- break;
- case 63:
- case 85:
- String var5 = Integer.toHexString(var2);
- this.fErrorHandler.error1(var1, this.fStringPool.addString(var5));
- break;
- case 80:
- case 82:
- case 110:
- String var3 = (new Character((char)var2)).toString();
- this.fErrorHandler.error1(var1, this.fStringPool.addString(var3));
- }
-
- return super.fCurrentOffset;
- }
-
- public boolean skippedChar(char var1) throws IOException {
- if (this.oweLeadingSpace) {
- if (var1 == ' ') {
- this.oweLeadingSpace = false;
- return true;
- } else {
- return false;
- }
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- if (var1 == ' ') {
- this.oweTrailingSpace = false;
- return true;
- } else {
- return false;
- }
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else if (var1 == this.fData.charAt(super.fCurrentOffset)) {
- ++super.fCurrentOffset;
- return true;
- } else {
- return false;
- }
- }
-
- public boolean lookingAtChar(char var1) throws IOException {
- if (this.oweLeadingSpace) {
- return var1 == ' ';
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- return var1 == ' ';
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- return var1 == this.fData.charAt(super.fCurrentOffset);
- }
- }
-
- public boolean skippedSpace() throws IOException {
- if (this.oweLeadingSpace) {
- this.oweLeadingSpace = false;
- return true;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- this.oweTrailingSpace = false;
- return true;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- char var1 = this.fData.charAt(super.fCurrentOffset);
- if (var1 != ' ' && var1 != '\t' && var1 != '\n' && var1 != '\r') {
- return false;
- } else {
- ++super.fCurrentOffset;
- return true;
- }
- }
- }
-
- public boolean lookingAtSpace() throws IOException {
- if (this.oweLeadingSpace) {
- return true;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- return true;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- char var1 = this.fData.charAt(super.fCurrentOffset);
- return var1 == ' ' || var1 == '\t' || var1 == '\n' || var1 == '\r';
- }
- }
-
- public int skipPastSpaces() throws IOException {
- if (this.oweLeadingSpace) {
- this.oweLeadingSpace = false;
- }
-
- while(super.fCurrentOffset < this.fEndOffset) {
- char var1 = this.fData.charAt(super.fCurrentOffset);
- if (var1 != ' ' && var1 != '\t' && var1 != '\n' && var1 != '\r') {
- return super.fCurrentOffset;
- }
-
- ++super.fCurrentOffset;
- }
-
- if (this.oweTrailingSpace) {
- this.oweTrailingSpace = false;
- return super.fCurrentOffset;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- }
-
- public int skipDecimalDigit() {
- if (this.oweLeadingSpace) {
- return -1;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- return -1;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- char var1 = this.fData.charAt(super.fCurrentOffset);
- if (var1 >= '0' && var1 <= '9') {
- ++super.fCurrentOffset;
- return var1 - 48;
- } else {
- return -1;
- }
- }
- }
-
- public int skipHexDigit() {
- if (this.oweLeadingSpace) {
- return -1;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- return -1;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- char var1 = this.fData.charAt(super.fCurrentOffset);
- if (var1 <= 'f' && XMLReader.fgAsciiXDigitChar[var1] != 0) {
- ++super.fCurrentOffset;
- return var1 - (var1 < 'A' ? 48 : (var1 < 'a' ? 65 : 97) - 10);
- } else {
- return -1;
- }
- }
- }
-
- public boolean skippedAlpha() {
- if (this.oweLeadingSpace) {
- return false;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- return false;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- char var1 = this.fData.charAt(super.fCurrentOffset);
- if (var1 <= 'z' && XMLReader.fgAsciiAlphaChar[var1] == 1) {
- ++super.fCurrentOffset;
- return true;
- } else {
- return false;
- }
- }
- }
-
- private boolean skippedCharWithFlag(byte var1) {
- if (this.oweLeadingSpace) {
- if ((XMLReader.fgCharFlags[32] & var1) != 0) {
- this.oweLeadingSpace = false;
- return true;
- } else {
- return false;
- }
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- if ((XMLReader.fgCharFlags[32] & var1) != 0) {
- this.oweTrailingSpace = false;
- return true;
- } else {
- return false;
- }
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- char var2 = this.fData.charAt(super.fCurrentOffset);
- if (var2 < 128 && (XMLReader.fgCharFlags[var2] & var1) != 0) {
- ++super.fCurrentOffset;
- return true;
- } else {
- return false;
- }
- }
- }
-
- public final boolean skippedVersionNum() {
- return this.skippedCharWithFlag((byte)1);
- }
-
- public final boolean skippedEncName() {
- return this.skippedCharWithFlag((byte)2);
- }
-
- public final boolean skippedPubidChar() {
- if (this.oweLeadingSpace) {
- this.oweLeadingSpace = false;
- return true;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- this.oweTrailingSpace = false;
- return true;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- char var1 = this.fData.charAt(super.fCurrentOffset);
- if (var1 < 128) {
- if ((XMLReader.fgCharFlags[var1] & 4) != 0) {
- ++super.fCurrentOffset;
- return true;
- }
-
- if (var1 == '\n') {
- ++super.fCurrentOffset;
- ++super.fLinefeedCounter;
- return true;
- }
-
- if (var1 == '\r') {
- ++super.fCurrentOffset;
- ++super.fCarriageReturnCounter;
- return true;
- }
- }
-
- return false;
- }
- }
-
- public boolean skippedString(char[] var1) throws IOException {
- if (this.oweLeadingSpace) {
- return false;
- } else {
- int var2 = super.fCurrentOffset;
-
- for(int var3 = 0; var3 < var1.length; ++var3) {
- if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- return false;
- }
-
- throw new ArrayIndexOutOfBoundsException();
- }
-
- if (this.fData.charAt(var2) != var1[var3]) {
- return false;
- }
-
- ++var2;
- }
-
- super.fCurrentOffset = var2;
- return true;
- }
- }
-
- public int skipPastName(char var1) throws IOException {
- if (this.oweLeadingSpace) {
- return super.fCurrentOffset;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- return super.fCurrentOffset;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- char var2 = this.fData.charAt(super.fCurrentOffset);
- if ((XMLReader.fgCharFlags[var2] & 16) == 0) {
- return super.fCurrentOffset;
- } else {
- do {
- ++super.fCurrentOffset;
- if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- return super.fCurrentOffset;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- }
-
- var2 = this.fData.charAt(super.fCurrentOffset);
- if (var1 == var2) {
- return super.fCurrentOffset;
- }
- } while((XMLReader.fgCharFlags[var2] & 32) != 0);
-
- return super.fCurrentOffset;
- }
- }
- }
-
- public int scanName(char var1, int var2) throws IOException {
- int var3 = super.fCurrentOffset;
- int var4 = this.skipPastName(var1) - var3;
- if (var4 == 0) {
- return -1;
- } else {
- int var5 = this.fStringPool.addSymbol(this.fData.substring(var3, var3 + var4));
- return var2 != -1 && var2 != var5 ? -1 : var5;
- }
- }
-
- public int skipPastNmtoken(char var1) throws IOException {
- if (this.oweLeadingSpace) {
- return super.fCurrentOffset;
- } else if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- return super.fCurrentOffset;
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- } else {
- for(char var2 = this.fData.charAt(super.fCurrentOffset); var1 != var2; var2 = this.fData.charAt(super.fCurrentOffset)) {
- if ((XMLReader.fgCharFlags[var2] & 32) == 0) {
- return super.fCurrentOffset;
- }
-
- ++super.fCurrentOffset;
- if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.oweTrailingSpace) {
- return super.fCurrentOffset;
- }
-
- throw new ArrayIndexOutOfBoundsException();
- }
- }
-
- return super.fCurrentOffset;
- }
- }
-
- private void callCharDataHandler(int var1, int var2, boolean var3) throws Exception {
- int var4 = var2 - var1;
- if (!this.fDocumentHandler.sendCharDataAsCharArray()) {
- int var5 = var4 == 0 ? 0 : this.fStringPool.addString(this.fData.substring(var1, var1 + var4));
- this.fDocumentHandler.characters(var5, var3);
- } else {
- this.fDocumentHandler.characters(this.fData.toCharArray(), var1, var4, var3);
- }
- }
-
- private void callWSCharDataHandler(int var1, int var2, boolean var3) throws Exception {
- int var4 = super.fParserState.getScanner().getCurrentContentSpecType();
- if (var4 != 4) {
- this.callCharDataHandler(var1, var2, var3);
- } else {
- int var5 = var2 - var1;
- if (!this.fDocumentHandler.sendCharDataAsCharArray()) {
- int var6 = var5 == 0 ? 0 : this.fStringPool.addString(this.fData.substring(var1, var1 + var5));
- this.fDocumentHandler.ignorableWhitespace(var6, var3);
- } else {
- this.fDocumentHandler.ignorableWhitespace(this.fData.toCharArray(), var1, var5, var3);
- }
- }
- }
-
- public int scanContent(ScanContentState var1) throws Exception {
- int var2 = super.fCurrentOffset;
- if (super.fCurrentOffset >= this.fEndOffset) {
- throw new ArrayIndexOutOfBoundsException();
- } else {
- char var3 = this.fData.charAt(super.fCurrentOffset++);
- if (var3 < 128) {
- byte var4 = XMLReader.fgCharFlags[var3];
- if ((var4 & 8) == 0 && var3 != '\n' && var3 != '\r') {
- if (var3 == '<') {
- if (!var1.inCDSect) {
- return 1;
- }
- } else if (var3 == '&') {
- if (!var1.inCDSect) {
- return 2;
- }
- } else {
- if (var3 != ']') {
- --super.fCurrentOffset;
- return 4;
- }
-
- if (super.fCurrentOffset + 2 <= this.fEndOffset && this.fData.charAt(super.fCurrentOffset) == ']' && this.fData.charAt(super.fCurrentOffset + 1) == '>') {
- super.fCurrentOffset += 2;
- if (!var1.inCDSect) {
- return 3;
- }
-
- var1.inCDSect = false;
- return this.scanContent(var1);
- }
- }
- } else if (var3 == ' ' || var3 == '\t' || var3 == '\n' || var3 == '\r') {
- do {
- if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, this.fEndOffset, var1.inCDSect);
- }
-
- throw new ArrayIndexOutOfBoundsException();
- }
-
- if (var3 == '\n') {
- ++super.fLinefeedCounter;
- } else if (var3 == '\r') {
- ++super.fCarriageReturnCounter;
- }
-
- var3 = this.fData.charAt(super.fCurrentOffset++);
- } while(var3 == ' ' || var3 == '\t' || var3 == '\n' || var3 == '\r');
-
- if (var3 < 128) {
- var4 = XMLReader.fgCharFlags[var3];
- if ((var4 & 8) == 0) {
- if (var3 == '<') {
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
- }
-
- return 25;
- }
- } else if (var3 == '&') {
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
- }
-
- return 26;
- }
- } else {
- if (var3 != ']') {
- --super.fCurrentOffset;
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 28;
- }
-
- if (super.fCurrentOffset + 2 <= this.fEndOffset && this.fData.charAt(super.fCurrentOffset) == ']' && this.fData.charAt(super.fCurrentOffset + 1) == '>') {
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
- }
-
- super.fCurrentOffset += 2;
- if (!var1.inCDSect) {
- return 27;
- }
-
- var1.inCDSect = false;
- return this.scanContent(var1);
- }
- }
- }
- } else if (var3 == '\ufffe' || var3 == '\uffff') {
- --super.fCurrentOffset;
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 28;
- }
- }
- } else if (var3 == '\ufffe' || var3 == '\uffff') {
- --super.fCurrentOffset;
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 4;
- }
-
- while(true) {
- if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, this.fEndOffset, var1.inCDSect);
- }
-
- throw new ArrayIndexOutOfBoundsException();
- }
-
- var3 = this.fData.charAt(super.fCurrentOffset++);
- if (var3 >= 128) {
- break;
- }
-
- byte var7 = XMLReader.fgCharFlags[var3];
- if ((var7 & 8) == 0) {
- if (var3 == '\n') {
- ++super.fLinefeedCounter;
- } else {
- if (var3 != '\r') {
- break;
- }
-
- ++super.fCarriageReturnCounter;
- }
- }
- }
-
- while(true) {
- if (var3 < 128) {
- byte var8 = XMLReader.fgCharFlags[var3];
- if ((var8 & 8) == 0) {
- if (var3 == '<') {
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
- }
-
- return 9;
- }
- } else if (var3 == '&') {
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
- }
-
- return 10;
- }
- } else if (var3 == '\n') {
- ++super.fLinefeedCounter;
- } else if (var3 == '\r') {
- ++super.fCarriageReturnCounter;
- } else {
- if (var3 != ']') {
- --super.fCurrentOffset;
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 12;
- }
-
- if (super.fCurrentOffset + 2 <= this.fEndOffset && this.fData.charAt(super.fCurrentOffset) == ']' && this.fData.charAt(super.fCurrentOffset + 1) == '>') {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
- }
-
- super.fCurrentOffset += 2;
- if (!var1.inCDSect) {
- return 11;
- }
-
- var1.inCDSect = false;
- return this.scanContent(var1);
- }
- }
- }
- } else if (var3 == '\ufffe' || var3 == '\uffff') {
- --super.fCurrentOffset;
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 12;
- }
-
- if (super.fCurrentOffset >= this.fEndOffset) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- }
-
- throw new ArrayIndexOutOfBoundsException();
- }
-
- var3 = this.fData.charAt(super.fCurrentOffset++);
- }
- }
- }
- }
-